#ifndef __ATTDEF_H__
#define __ATTDEF_H__

#include "TypeDef.h"

/**
 * Clase que permite instanciar un objeto que represente la definicion de un atributo que puede tener un tag definido con una instancia de TagDef
 */
class AttDef{
	string* nombre;
	TypeDef* tipo;
	string* valorDefault;
public:

	/**
	 * Inicializa la definicion del atributo con un nombre, un tipo y un valor default
	 */
	AttDef(const string& nombre, TypeDef* tipo, const string& valorDefault){
		this->nombre = new string(nombre);
		this->tipo = tipo;
		this->valorDefault = new string(valorDefault);
	}

	/**
	 * Inicializa la definicion del atributo con un nombre, un tipo
	 */
	AttDef(const string& nombre, TypeDef* tipo){
		this->nombre = new string(nombre);
		this->tipo = tipo;
		this->valorDefault = NULL;
	}

	/**
	 * Devuelve el nombre del atributo
	 */
	string getNombre(){
		return *this->nombre;
	}

	/**
	 * Devuelve el tipo del atributo
	 */
	TypeDef* getTipo(){
		return this->tipo;
	}

	/**
	 * Devuelve el valor default del atributo
	 */
	string* getValorDefault(){
		return this->valorDefault;
	}

	/**
	 * Libera la memoria usada para guardar el nombre
	 * Importante: No destruye el tipo guardado
	 */
	~AttDef(){
		delete this->nombre;
		delete this->valorDefault;
	}
};

#endif